//
//  VideoAndAudioDecoder.h
//  AppControllerDevices
//
//  Created by joker on 15/8/7.
//  Copyright (c) 2015年 joker. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "Configuration.h"

    //MARK: FFmpeg头文件包含
#import "libavcodec/avcodec.h"
#import  "libavformat/avformat.h"
#import  "libswscale/swscale.h"

#import <AudioToolbox/AudioToolbox.h>

@interface VideoAndAudioDecoder : NSObject
{
    AudioStreamBasicDescription audioDescription; //音频流基本描述

    AudioQueueBufferRef audioQueueBuffers[QUEUE_BUFFER_SIZE];//音频队列缓存

}   //MARK:音频解码相关变量
@property     NSLock *synlock ;                                               //同步控制
@property char *pcmDataBuffer;                                        //pcm数据区
@property int audioOutFormat;                  //存放设备音频输出的格式
@property AudioQueueRef audioQueue;                               //音频播放队列
@property BOOL channleIndex;                    //通道号
@property AVPacket AudioPacket;
@property AVFrame *pPCMAudio;

    //MARK:视频解码相关变量
@property AVCodecContext *pCodecCtx;    //保存解码器相关参数信息
@property AVCodec *pCodec;                      //视频解码器
@property AVFrame *pFrame;                     //存放解码后的原始视频帧
@property AVFrame *pFrameRGB;              //存放经RGB转换后的视频帧
@property AVPacket VideoPacket;              //存放视频流数据的包变量
@property int frameFinished;                     //单帧是否解码完毕
@property int numBytes;                             //存放转换RGB帧时申请缓存的字节数
@property uint8_t *buffer;                        //存放视频流缓存数据

    //MARK:成员函数

/**
 *初始化视频解码器的相关变量。
 */
-(id)initVideoDecoder;

/**
 *对视频流缓冲数据进行解码
 *
 *@param buf    视频流缓冲区首地址
 *
 *@param size   视频流缓冲区的字节大小
 *
 *@return   void
 */
-(void)VideoDecodeWithBuf:(char *)buf BufSize: (int) size;

/**
 *对视频流解码相关的变量进行清理工作，一般在解码结束后进行
 */
-(void)VideoDecoderDealloc;


/**
 *初始化音频解码器相关变量
 */
-(id)initAudioDecoderWithFormat:(int)audioFormat ChannelIndex:(int) avIndex;

/**
 *对音频流缓冲数据进行解码
 *
 *@param    buf     音频流缓冲区首地址
 *
 *@param    size     音频流缓冲区的字节大小
 *
 *@return   void
 */
-(void)ReadPCMAndPlay:(char *)buf BufSize:(int)size BufIndex:(int)index;

/**
 *对音频流解码相关的变量进行清理工作，一般在解码结束后进行
 *
 */
-(void)AudioDecoderDealloc;

@end
